﻿using System;
using System.Collections.Generic;
using TPDiseño.Clases_de_Entidad;
using DAO.DataSetConsultoraTableAdapters;

namespace DAO
{
    public class DAORespuesta : DAO{
        //Atributos de manejo de instancia (singleton)
        static DAORespuesta instance = null;    
        // Atributos para acceso a los DataSet Tipados
        private DataSetConsultora.RespuestaDataTable RespuestaTabla = new DataSetConsultora.RespuestaDataTable();
        private RespuestaTableAdapter RespuestaTableAdapter = new RespuestaTableAdapter();
        // Dependencias de otros DAOs
        private DAOOp_Respuesta miDAOOp_Respuesta = DAOOp_Respuesta.Instance;

        public static DAORespuesta Instance
        {
            get
            {
                if (instance == null)
                {
                    lock (padlock)
                    {
                        if (instance == null)
                        {
                            instance = new DAORespuesta();
                        }
                    }
                }
                return instance;
            }
        }
        
        /*
        public Respuesta guardar(Respuesta unaRespuesta)
        {
            RespuestaTableAdapter.Insertar(unaRespuesta._nombre_respuesta, unaRespuesta._descripcion);
             
            return recolectarUno();
        }
         */

        public void actualizar(Respuesta unaRespuesta)
        {

            // Actualizo la Respuesta en la db pro medio de su table adapter
            RespuestaTableAdapter.Actualizar(unaRespuesta._nombre_respuesta, unaRespuesta._descripcion, unaRespuesta._cod_respuesta);

        }
        
        /*
        public List<Respuesta> cargar()
        {

            // Cargo las Respuesta de la db
            RespuestaTabla = RespuestaTableAdapter.GetData();

            // La retorno por medio de la funcion de recoleccion
            return recolectar();
        }
         */

                
        public Respuesta cargar(int cod_respuesta, Pregunta nuevaPregunta)
        {

            // Cargo las Respuesta de la db
            RespuestaTabla = RespuestaTableAdapter.ConsultarPor(cod_respuesta);

            // La retorno por medio de la funcion de recoleccion
            return recolectarUno(nuevaPregunta);


        }

        public Respuesta recolectarUno(Pregunta unaPregunta)
        {
            // Devuelvo una unica pregunta mapeada de la tabla
            return new Respuesta(RespuestaTabla[0].id,
                                 RespuestaTabla[0].nombre_respuesta,
                                 RespuestaTabla[0].descripcion,
                                 miDAOOp_Respuesta.cargar(RespuestaTabla[0].id, unaPregunta)
                                 );


        }

        public List<Respuesta> recolectar(Pregunta unaPregunta)
        {
            // Creo la lista para recolectar y devolver las Respuestas cargados de la db
            List<Respuesta> RespuestasCargados = new List<Respuesta>();

            // Recorro las Respuestas de la tabla
            foreach (DataSetConsultora.RespuestaRow unaRespuestaFila in RespuestaTabla)
            {

                // Creo una Respuesta y lo agrego a la lista de Respuestas cargados
                RespuestasCargados.Add(new Respuesta(unaRespuestaFila.id,
                                                     unaRespuestaFila.nombre_respuesta,
                                                     unaRespuestaFila.descripcion,
                                                     miDAOOp_Respuesta.cargar(unaRespuestaFila.id, unaPregunta)
                                                   )
                                      );

            }

            // Finalmente devuelvo la lista de RespuestasCargados            
            return RespuestasCargados;
        }

    }
}
